package com.wujie.mall.domain.payment;

import lombok.Getter;

/**
 * 支付类型枚举
 * 
 * @author wujie
 * @since 2024-08-26
 */
@Getter
public enum PaymentType {
    
    /**
     * 支付宝
     */
    ALIPAY("alipay", "支付宝支付", "支付宝官方支付渠道"),
    
    /**
     * 微信支付
     */
    WECHAT_PAY("wechat", "微信支付", "微信官方支付渠道"),
    
    /**
     * 银行卡支付
     */
    BANK_CARD("bank", "银行卡支付", "银行卡快捷支付"),
    
    /**
     * PayPal支付
     */
    PAYPAL("paypal", "PayPal支付", "PayPal国际支付"),
    
    /**
     * 余额支付
     */
    BALANCE("balance", "余额支付", "账户余额支付");

    /**
     * 支付类型代码
     */
    private final String code;
    
    /**
     * 支付类型名称
     */
    private final String name;
    
    /**
     * 支付类型描述
     */
    private final String description;

    PaymentType(String code, String name, String description) {
        this.code = code;
        this.name = name;
        this.description = description;
    }

    /**
     * 根据代码获取支付类型
     * @param code 支付类型代码
     * @return 支付类型
     */
    public static PaymentType fromCode(String code) {
        for (PaymentType type : values()) {
            if (type.code.equals(code)) {
                return type;
            }
        }
        throw new IllegalArgumentException("不支持的支付类型: " + code);
    }

    /**
     * 是否为第三方支付
     * @return true-第三方支付，false-非第三方支付
     */
    public boolean isThirdParty() {
        return this == ALIPAY || this == WECHAT_PAY || this == PAYPAL;
    }

    /**
     * 是否需要外部认证
     * @return true-需要外部认证，false-不需要外部认证
     */
    public boolean requiresExternalAuth() {
        return this != BALANCE;
    }
}